package com.xtck.ha.system.api;

import com.alibaba.fastjson2.JSONObject;
import com.xtck.ha.common.core.constant.SecurityConstants;
import com.xtck.ha.common.core.constant.ServiceNameConstants;
import com.xtck.ha.common.core.domain.R;
import com.xtck.ha.common.domain.system.api.object.TblDevice;
import com.xtck.ha.common.domain.system.api.object.TblSatellite;
import com.xtck.ha.common.domain.system.api.object.TblTmParam;
import com.xtck.ha.common.domain.system.api.object.vo.TblSatelliteVo;
import com.xtck.ha.system.api.factory.RemoteObjectFallbackFactory;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 用户服务
 * 
 * @author hm
 */
@FeignClient(contextId = "remoteObjectService", value = ServiceNameConstants.GENERAL_SERVICE, fallbackFactory = RemoteObjectFallbackFactory.class)
public interface RemoteObjectService
{
    /**
     * 查询卫星列表
     * @param tblSatellite 查询条件
     * @param source 请求来源
     * @return 结果
     */
    @GetMapping("/satellite/getSatList")
    public R<List<TblSatellite>> getSatList(@RequestParam("tblSatellite") TblSatellite tblSatellite, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 查询健康对象列表
     * @param source 请求来源
     * @return 结果
     */
    @GetMapping("/satellite/obs")
    public R<List<TblSatelliteVo>> obs(@RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 查询设备列表
     * @param tblDevice 查询条件
     * @param source 请求来源
     * @return 结果
     */
    @GetMapping("/device/getDeviceList")
    public R<List<TblDevice>> getDeviceList(@RequestParam("tblDevice") TblDevice tblDevice, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 查询参数列表
     * @param tblTmParam 查询条件
     * @param source 请求来源
     * @return 结果
     */
    @GetMapping("/param/getParamList")
    public R<List<TblTmParam>> getParamList(@RequestParam("tblTmParam") TblTmParam tblTmParam, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

    /**
     * 插入异常预案数据
     * @param jsonObject
     * @param source 请求来源
     * @return 结果
     */
    @PostMapping("mitigation")
    public R mitigation(@RequestBody JSONObject jsonObject, @RequestHeader(SecurityConstants.FROM_SOURCE) String source);

}
